package mnnu.ghbe.controller;

import mnnu.ghbe.config.OpenAIConfig;
import mnnu.ghbe.service.OpenAIService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.Base64;

/**
 * OpenAI控制器
 * 提供与OpenAI相关的API端点
 */
@RestController
@RequestMapping("/api/openai")
public class OpenAIController {

    @Autowired
    private OpenAIService openAIService;
    
    @Autowired
    private OpenAIConfig openAIConfig;

    /**
     * OCR接口 - 支持Base64格式图片并识别文字
     *
     * @param base64Image Base64格式的图片数据
     * @param prompt 自定义提示词，如果不提供则使用application.properties中的默认值
     * @return OCR识别结果
     */
    @PostMapping("/ocr")
    public ResponseEntity<String> ocrBase64(@RequestBody String base64Image, 
                                           @RequestParam(value = "prompt", required = false) String prompt) {
        try {
            // 检查Base64数据是否为空
            if (base64Image == null || base64Image.isEmpty()) {
                return ResponseEntity.badRequest().body("图片数据不能为空");
            }
            
            // 如果没有提供prompt参数，则使用配置文件中的默认值
            String ocrPrompt = prompt != null ? prompt : openAIConfig.getOcrPrompt();
            
            // 如果Base64数据不包含data:image前缀，则添加默认前缀
            String imageDataUrl;
            if (base64Image.startsWith("data:image")) {
                imageDataUrl = base64Image;
            } else {
                // 默认使用jpeg格式
                imageDataUrl = "data:image/jpeg;base64," + base64Image;
            }

            // 调用VLM模型进行OCR识别，传递prompt参数
            String response = openAIService.ocrWithModel(imageDataUrl, ocrPrompt);
            return ResponseEntity.ok(response);
        } catch (Exception e) {
            return ResponseEntity.status(500).body("OCR识别失败: " + e.getMessage());
        }
    }
}